iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
Kubernetes

從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南系列 第 24

【Day 24】全方位可觀測性:Prometheus + Grafana 監控集群指標

  • 分享至 

  • xImage
  •  

今日目標

  • 理解雲原生可觀測性(Observability)的三大支柱:Metrics(指標)、Logs(日誌)、Traces(追蹤)。
  • 搞懂 Kubernetes 監控界的黃金標準:PrometheusGrafana 的架構分工。
  • 掌握 Pull 模型、PromQL 查詢語法與 Exporter 的角色。
  • 實戰操作:使用 Helm 一鍵部署 kube-prometheus-stack,並在 Grafana 儀表板中即時查看 Node 與 Pod 的運算資源狀態。

什麼是可觀測性(Observability)?

當微服務集群擴展到數十台 Node、數百個 Pod 時,傳統的「登入機器看 log」或單純依賴 kubectl top 已經完全不夠用。

現代雲原生架構講求可觀測性的三大支柱:

支柱 核心內容 典型開源解決方案
Metrics(指標) 可聚合的數值型數據(如 CPU 使用率、記憶體消耗、每秒請求數 QPS) Prometheus
Logs(日誌) 帶有時間戳記的文字事件記錄(如應用程式報錯堆疊 Error Stack) Loki / Fluentd / ELK
Traces(分散式追蹤) 單一請求跨越多個微服務的完整呼叫鏈路與延遲分析 Jaeger / OpenTelemetry

今天我們將聚焦在最核心、最關鍵的第一支柱:Metrics 監控


監控黃金組合:Prometheus 與 Grafana

Prometheus 是繼 Kubernetes 之後,CNCF(雲原生運算基金會)第二個正式畢業的旗艦專案。

1. Prometheus:指標採集與時序資料庫(TSDB)

  • Pull 模型(主動拉取):Prometheus Server 會定期向各個服務(如 Node Exporter、Kube-State-Metrics)的 /metrics 端點發送 HTTP 請求抓取最新數據。
  • 時序資料庫(TSDB):專門高效儲存帶有時間戳記的數值數據。
  • PromQL:強大的時序數據查詢語言(例如計算過去 5 分鐘的 CPU 平均負載)。

2. Grafana:視覺化儀表板總管

  • Prometheus 自帶的圖表介面較陽春,而 Grafana 專注於「美觀、直觀、可自訂」的儀表板展示。
  • 支援多種資料來源(Data Sources),社群有成千上萬套現成精美的 Dashboard 範本可以直接套用。

實戰演練:一鍵安裝 Kube-Prometheus-Stack

社群將 Prometheus、Grafana、Node Exporter、Alertmanager 打包成了一套極其強大的 Chart——kube-prometheus-stack

步驟 1:新增 Prometheus 社群 Helm Repo

helm repo add prometheus-community [https://prometheus-community.github.io/helm-charts](https://prometheus-community.github.io/helm-charts)
helm repo update

步驟 2:使用 Helm 安裝監控套件

我們建立一個獨立的命名空間 monitoring 來運行監控元件:

helm install prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace

小提醒:監控套件元件較多,初次下載映像檔與啟動約需 1 至 3 分鐘。

檢查監控 Pod 是否全數進入 Running

kubectl get pods -n monitoring

步驟 3:存取 Grafana 視覺化儀表板

取得 Grafana 的登入密碼(預設帳號為 admin,密碼存放於 Secret 中):

kubectl get secret --namespace monitoring prometheus-stack-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

使用端口轉發將 Grafana 服務映射到本地:

kubectl port-forward --namespace monitoring svc/prometheus-stack-grafana 3000:80

保持終端機開啟,打開瀏覽器訪問 http://localhost:3000

  1. 輸入帳號 admin 與剛剛解碼取得的密碼登入。
  2. 進入側邊欄的 Dashboards
  3. 點選內建的精選儀表板:
  • Kubernetes / Compute Resources / Cluster:查看整個集群的 CPU 與記憶體總使用率。
  • Kubernetes / Compute Resources / Pod:查看單一 Pod 的即時資源消耗曲線。

步驟 4:體驗 PromQL 查詢

如果你想直接查詢 Prometheus 指標,也可以將 Prometheus Server 轉發到本地:

kubectl port-forward --namespace monitoring svc/prometheus-stack-kube-prom-prometheus 9090:9090

打開瀏覽器訪問 http://localhost:9090,在 Expression 搜尋框輸入以下常用 PromQL 查詢:

查詢所有節點的 CPU 空閒率百分比:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

查詢當前正在運行的 Pod 總數:

count(kube_pod_status_phase{phase="Running"})

本日小結

今天我們成功在 Kubernetes 集群上建置了企業級的監控體系:

  • 理解了 Prometheus(指標收集)Grafana(視覺化展示) 的分工架構。
  • 學會了使用 kube-prometheus-stack 快速拉起全套監控基礎設施。
  • 掌握了在 Grafana 上即時監看 Node 與 Pod 健康狀態的方法。

有了指標監控後,當系統發生嚴重錯誤(例如 Pod 重複 Crash 或記憶體不足 OOMKilled)時,我們該去哪裡集中搜尋與分析散落在各處的容器日誌?

明天 Day 25,我們將學習日誌收集的中樞神經:「集中式日誌管理:使用 Grafana Loki + Promtail 收集 Pod 日誌」


上一篇
【Day 23】自動彈性伸縮:Horizontal Pod Autoscaler (HPA) 實戰
下一篇
【Day 25】集中式日誌管理:使用 Grafana Loki + Promtail 收集 Pod 日誌
系列文
從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言